package practica6.Problema8Reinas;

import java.util.LinkedList;
import java.util.List;

import framework.IRule;

public class ReglasrReinas implements IRule<StateReinas> {

    private List<StateReinas> aplicacionRegla;
    

    /**
     * Aplica esta regla a un estado y devuelve todos los estados obtenidos
     * 
     * @param state : el estado al cual se aplicara esta regla : {@code State}
     * 
     * @return una lista con todos los estados {@code state'} tal que {@code
   http://10.1.16.1:880/wlan1/welcome.html?timeout=1800&lan_id=wlan1  * state} deriva por esta regla a {@code state'} : {@code List<State>}
     **/
    @Override
    public List<StateReinas> apply(StateReinas tablero) {
	aplicacionRegla = new LinkedList<StateReinas>();
	int i = tablero.getFilaSinReina();
	System.out.println("aplicando regla de av");
	for (int j = 0 ; j < 8 ; j++){
	    StateReinas nuevoTablero = tablero.clone();/*clono el tablero para generar un estado nuevo*/
	    nuevoTablero.ponerReina(i,j);/*pone una reina*/ 
	    aplicacionRegla.add(nuevoTablero);
	}
	return aplicacionRegla;
    }

    /**
     * Indica si esta regla es aplicable a un estado
     * 
     * @param state : el estado a evaluar : {@code State}
     * 
     * @return true sii esta regla es aplicable a {@code state} : {@code
     * boolean}
     **/
    @Override
    public boolean isApplicable(StateReinas tablero) {
	return (tablero.getFilaSinReina() < 8);/* si la fila donde poner la reina es menor a 8 se puede */
    }

}
